#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e6 + 10; 
int p[maxn]; // 记录以 i 位置的回文半径的长度
char s[maxn]; // 因为会插入字符, 所以开二倍空间(奇数个会插入偶数个, 偶数个会插入奇数个)

void solve(){
	cin>>s+1;
	int n = strlen(s+1);
	s[0]='^', s[2*n+2]='$'; // 开头结尾用特殊字符

	for(int i=2*n+1;i>=1;i--){ // 插入 #
		if(i&1){ // 奇数位置变为  #
			s[i]='#';
		} else { // 偶数位置
			s[i]=s[i>>1]; // 原来的字符位置都变为原来的 2 倍
		}
	}
	
	int c=0, r=0; // c 为 中心, r 为右边界, 注意 r 为开区间 c, r)
	// 开始 manacher 
	for(int i=1;i<=2*n+1;i++){
		if(i<r){
			p[i]=min(r-i, p[2*c-i]); // 半径至少要与对称位置的半径一样, 但是最多半径为 r-i
		}
		// 开始扩大半径
		while (s[i-p[i]]==s[i+p[i]]) {
			p[i]++;
		}
		if(i+p[i]>r){ // 新的最大的半径变大
			c=i, r=i+p[i];
		}
	}
	
	int ans=0;
	for(int i=1;i<=2*n+1;i++){
		ans=max(ans, p[i]-1); // 因为填充字符了 p[i]-1 就是原来的直径
	}
	cout<<ans<<'\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
